Inżynieria cech i wstępne modelowanie

Wczytanie danych

Sczytujemy nazwy kolumn:

Do występujących kolumn o zduplikowanych nazwach dodajemy odpowiednią numerację.

Inżynieria cech

Bogatsi o doświadczenia z dokonanego EDA, przechodzimy do inżynierii cech. Wcześniej udało nam się pokazać wysoką korelację między zmiennymi w domenie czasu, a częstotliwości. Z tego powodu już na samym początku przed zastosowaniem PCA chcieliśmy dokonać redukcji wymiarów tylko do domeny częstotliwości. Jednak zbadanie zachowania się metryki silhouette_score dawało lepsze rezultaty, gdy PCA było na całości zbioru.

W celu zredukcji zbyt dużej liczby cech zdecydowaliśmy się na wspomnianą wcześniej metodę poznaną na laboratoriach - PCA. Aby dostosować odpowiednią ilość komponentów, tworzymy wykres obazujący ilość wyjaśnianej wariancji.

Już dla 30 komponentów zauważamy, że wyjaśnione zostało ponad 89% wariancji. Uznajemy, że jest to w naszym przypadku wynik wystarczający i to na taką liczbę komponentów się decydujemy. Później wywoływaliśmy kod dla innej liczby komponentów np. 10, 50, 100, 200 jednak nie miało to bardzo dużego wpływu na uzyskiwaną jakość metryk, a wyniki nie były zbyt interesujące.

Wstępne modelowanie

Na tym etapie istotnym jest dla nas znalezenie odpowiedniej liczby klastrów. W tym celu będziemy badać zachowanie metryki silhouette_score oraz calinski_harabasz_score.

Jej zachowanie silhouette_score oraz calinski_harabasz_score jednoznacznie wskazywały, aby dokonać wyodrębnienie na 2 klastry. Istotnie dokonamy teraz tego podziału. Jesteśmy świadomi, że dane dotyczą rodzajów aktywności ludzi mierzonej przez smartfony. Narzuca się zatem wniosek, że być może bardzo łatwo jest odróźnić od siebie aktywności, które polegają na przemieszczaniu się od tych statycznych.

Dokonajmy zatem tego podziału.

Otrzymaliśmy dwa klastry podobnej liczności. Jeśli hipoteza odnośnie zachodzącego podziału jest prawdziwa, to dobrym pomysłem może być zbadanie, czy da się dokonać dalszego podziału w obrębie każdego z klastrów.

Zdecydowaliśmy się na zastosowanie teraz PCA ponownie w obrębie tych klastrów, przypuszczając, że inne cechy mogą lepiej teraz wyjaśniać wariancje osobno dla aktywności statycznych i dynaminczych.

Finalne modelowanie

Część notebooka do tego momentu bazuje głównie na doświadczeniach zebranych z pracą ze zbiorem w poprzednich tygodniach.

Gdy teraz testowaliśmy przeróżne modele, chciały (nie bez podstaw), dokonywać jedynie podziału na 2 klastry. Odseparowanie od siebie jedynie aktywności statycznych i dynamicznych nie jest jednak naszym zdaniem zadaniem ciekawym z punktu zadania klasteryzacji dla tego zbioru.

Zatem plan działania jest następujący.

Kmeans

Liczba klastrów

Badamy metryczki ponownie obrębie klastrów ponownie

Wartość dla silhouette_score.

Miara silhouette_score nadal pokazuje, aby dokonać dalszego podziału na 2 klastry. Widzimy jednak, że dla klastra zerowego podział na 3 jest niemal tak samo premiowany jak podział na 2 dla klastra pierwszego.

Zbadamy zatem zachowanie davies_bouldin_score. Ta metryka, oparta o średnie podobieństwo każdego z klastrów do pewnego, który najbardziej go przypomina. Podobieństwo jest zdefiniowane jako stosunek odległości wewnątrz klastra do odległości między klastrami - im mniejszy wynik tym lepiej.

Z obawy na to, że miara silhouette_score może wykazywać pewną tendencyjność i jest jej ciężko wyodrębniać klastry dla tych danych więc dokonuje najmniej możliwie podziałów sugerujemy się metryką davies_bouldin_score i dokonujemy podziału na 2 i 3 w kolejnym kroku (odpowiednio klastra 0 i klastra 1).

Etykietowanie

Wizualizacje

Z wizualizacji w trzech wymiarach, wnioskujemy, że dokonany podział ma sens i z dużym prawdopodobieństwem są to klastry porządane i do których ten projket powinien nas doprowadzić. Być może będzie to najlepszy optyczny podział, lecz zbadajmy jak poradzą sobie inne modele.

Najpierw jednak przeanalizujmy w porównianiu do orygianlnych etykiet.

Z wykresów widzimy, że:

Głównie nasz początkowy podział na dwa klastry, czyli, na zbiorowiska klastrów o indeksach: 0, 1 i 2, 3, 4 spowodował podział na czynności dynamiczne i czynności statyczne. Potwierdza to więc naszą początkową intuicję o tych zbiorach. Następne klasteryzacje tych podgrup, nie przyniosły już tak idealnych wyników. Głównie, w zbiorowisku ruchomym, udało się oddzielić czynności WALKING_DOWNSTAIRS od WALKING + WALKING_UPSTAIRS. Natomiast w zbiorowisku statycznym, właściwie udało się tylko oddzielić prawie idealnie LAYING, ale SITTING i STANDING dalej pozostają wymieszane.

AgglomerativeClustering

Teraz będziemy testowali klastrowanie przy użyciu AgglomerativeClustering. Będziemy testować każde z 4 zaproponowanych później połączeń, wybierając im jednak najpierw liczbę klastrów w oprciu o jakąś metrykę. Dobór metryki będzie się jednak odbywał za pomocą wyspecyfikowania liczby klastrów, nie wyboru odległości. Może mieć to pewne wady, ale dzięki temu możemy wybór zsynchronizować dla każdego typu łączenia, a nie robić to z osobna i jest szybciej.

Zbadajmy metryki

Liczba klastrów

Wybór dla cluster 0

Badamy kolejno 2 mertyki silhouette_score oraz davies_bouldin_score.

Wnioski: dla każdego algorytmu zastosujemy podział w tej cześci na 2 z wyjątkiem single, gdzie podzielimy na 3. Chcemy sprawdzić wyodrębnianie się większej liczby klastrów niż w poprzednim kamieniu milowym.

Wybór dla cluster 1

Tutaj zastosujemy podział dla warda i average na 3, a single i complete na 2.

Etykietowanie

Wizualizacje z podzialem na modele

Average

Wnioski: etykiety 0 i 1 odpowiadają podziałowi w klastrze 1. Szczególnie klasterek numer 1 ma mała liczność. Prawdopodobnie można by też oczekiwać inengo podziału dla klastr numer 2, który wyszedł całkiem obszerny. Nie jest to kandydat do najlepszego modelu

Wnioski: nie za bardzo jest co powiedzieć. Generalnie widać, że wyszło słabo, jedyny słuszny jest zaaplikowany już wcześniej podział na 2 typy aktywności.

Ward

Wnioski: Przynajmniej w naszym odczuciu, wizualny podział jest dosyć apetyczny. Jak się zresztą przekonamy, będzie to jedyny model z aglomeracyjnych gdony rozważania jako ten finalny. Całkiem fajny podział na etykiety 0 i 1. Również fajny podział między etykietami 2 i 3 gdzie optycznie również można przejść płaszczyzną na wyskości około z = 1. Klaster 4 wydaje się rownież sensowny, cieżko mu wiele zarzucić bo wiedzimy tylko w 3 wymiarach nasze dane.

Wnioski: generalne problemy z rozróznieniem walking i walking upstaris. Aktywność laying została całkiem fajnie odseparowana. Klastrowi 4 jednak mogliśmy co nieco zarzucić. W confrusion matrix widać, że zwiera on podobną liczność obserwacji każdego typu. Podsumowując, względnie łatwo jest oddzielić walking downstairs i laying.

Single

Wnioski: zapowiada się na dosyć słaby podział. Szczególnie rzucające się w oczy są niskie liczności pewnych podgrup.

Wnioski: Jak do 3d. Chyba nie ma co skupiać się bardziej na nierokujących modelach.

Complete

Wnioski: Nie wygląda to najlepiej, jednak jest pewna poprawa względem single.

Wnioski: Zapowiadało się nienajlepiej i tak faktycznie jest. Nie traćmy czasu i lećmy do kolejnych modeli.

GMM

Liczba klastrów

Z metryk wnioskujemy, aby dokonać podziału na 2 dla każdej metody w obrębie "klastra 0" i na 3 w obrebie klastra "klastra 1" - z wyjątkiem tied, tam znów na 2.

Tworzenie wyników

Wizualizacja wyników w 3D

Tendencja tworzenia się 3 klastra łączącego zbiory w poziomie (kolor pomarańczowy) się utrzymała. Mimo że widzimy istniejącą płaszczyznę rozdzielającą w poziomie.

Ładnie oddzieliło po kolorach żółtym i pomarańczowym. Nie istnieje już tak wyraźna granica w zbiorach o labelkach 0 i 1. Poprzednio to odcięcie było wyraźniejsze, a teraz mamy pewne przenikanie. Może to być całkiem fajne, okaże się na końcu.

Tutaj wnioski analogiczne do wyciaganych przy poprzenich przypadkach.

Tutaj również wnioski podobne. Możemy porównać sobie tutaj klastry 0 i 1 z tymi powyżej dla metody "diag". Zbiorki wydają się podobnie oddzielone - co innego pokaże confusion matrix.

Wizualizacja wyników w 2D

Ogólne wnioski: jeśli już w obrębie klastrów udaje się coś oddzielić to głównie WALKING DOWNSATIRS i LAYING. Mimo, że dig dzielił wizualnie podobnie do spherical to na conf matrix widizmy, że diag słabo wyodrębnił klastry w aktywnościach dynamicznych zawierając wiele z każdego rodzaju.

Birch

Liczba klastrów

Metrka silhouette_score dla obu klastrów wskazuje, że kolejny podział będzie najlepszy na 2 klastry. Zobaczymy tak jak poprzednio, co wskaże jeszcze metryka davies_bouldin_score.

Kolejna metryka wskazała dalszy podział na 2 klastry w obu przypadkach, dlatego takich podziałów dokonajmy.

Tworzenie wyników

Wizualizacja wyników w 3D

Wizualizacja wyników w 2D

Na koniec 3d dla oryginalnych labeli

Podsumowanie

Tutaj znajudje potwierdzenie intuicja, że te klastry dotyczące aktywności statycznych nie powinny "łączyć się w pionie", jednak każdy z zastosowanych algorytmów nie wyodrębnił tych klastrów w sposób pożądany.

Przynajmniej w 3 wymiarach - klastry dotyczące aktywności dynamicznych mocno się przenikają. Być może więcej eksperymentów z GMM pozwoliłoby na osiągnięcie tutaj użytecznych wyników.

Jako finalny model bez dostępu do etykiet i możliwości sprawdzenia wyników zdecydowalibyśmy się na KMeans. Dostarczał on do tego dobrych przesłanek optycznych i zachowanie się metryk też go popierało. Poza tym sposób działania algorytmu dawał (możliwe, że złudne, bo tego zakładać nie powinniśmy) poczucie bezpieczeństwa, że nie wpadniemy w coś totalnie złego przy tym zbiorze danych.